#pragma once
#include <string>
#include "Types.h"
#include "ICamera.h"
#include "FillMode.h"
using namespace std;
struct SDL_Window;
class IRenderer
{
public:
	virtual bool Init(int screenW, int screenH) = 0;
	virtual void Cleanup() = 0;
	virtual void Clear() = 0;
	virtual void Present() = 0;
	virtual void DrawRect2D(const vector2 &pos, const vector2 &size, float rotation, const vector2 &rotationOrigin) = 0;
	virtual void DrawRect2D(const vector2 &pos, const vector2 &size) = 0;
	virtual void DrawRect3D(const vector3 &pos, const vector2 &size, const vector3 &rotation, const vector2 &rotationOrigin) = 0;
	virtual void DrawLine(const vector3 &pointA, const vector3 &pointB, float pointSize) = 0;
	virtual void BeginUniformLine(float pointSize) = 0;
	virtual void DrawUniformLine(const vector3 &pointA, const vector3 &pointB) = 0;
	virtual void EndUniformLine() = 0;
	virtual int PrintStr2D(const vector2 &pos, const string &text, const color &c) = 0;
	virtual int PrintStr3D(const vector3 &pos, const vector3 &rotation, const string &text, const color &c) = 0;
	virtual void SetFillMode(const FillMode &fm) = 0;
	virtual void SetColor(const color &c) = 0;
	virtual void SetColor(const uint &id, const color &c) = 0;
	virtual bool SetGradientLength(const uint &length) = 0;
	virtual void SetBillboarding(bool enable) = 0;
	virtual void SetTexture(Texture *pTexture) = 0;
	virtual boost::shared_ptr<ICamera> GetActiveCamera() = 0;
	virtual void SetActiveCamera(boost::shared_ptr<ICamera> pCamera) = 0;
	virtual uint GetGradientLength() = 0;
	virtual vector2 GetScreenSize() = 0;
	virtual SDL_Window *GetScreenSurface() = 0;
	virtual matrix GetProjectionMatrix() = 0;
};